perm filename RECOG.OSA[1,ALS] blob
sn#001064 filedate 1972-07-11 generic text, type T, neo UTF8
00010 BEGIN "RECOG"
00020 DEFINE ⊂="COMMENT"; ⊂ 7/11/72;
00030 ⊂ This is the master program for the use of signature tables in
00040 speech recognition. It calls on a number of MAC routines for
00050 much of the actual work but this program sets up the tables
00060 as defined by an auxillary file which may be changed or replaced
00070 without any alteration to this program as written or to its
00080 subroutines;
00090
00100 LABEL LZZZZ;
00110 REQUIRE "COMSUB.HDR[SYS,ALS]" SOURCE_FILE;
00120
00130 REQUIRE "PREPAR[SYS,THO]" LOAD_MODULE;
00140 REQUIRE "SIG[SYS,ALS]" LOAD_MODULE;
00150 REQUIRE "DPYOLD.HDR[1,THO]" SOURCE_FILE;
00160 FORTRAN REAL PROCEDURE SQRT(REAL X);
00170 FORTRAN REAL PROCEDURE ALOG10(REAL X);
00180 FORTRAN REAL PROCEDURE COS(REAL X);
00190 FORTRAN REAL PROCEDURE SIN(REAL X);
00200 REQUIRE "FFT8X[1,THO]" LOAD_MODULE;
00210 EXTERNAL FORTRAN PROCEDURE FRXFM(REFERENCE INTEGER M;
00215 REFERENCE REAL X,Y);
00220 DEFINE DPYSIZ="1000";
00230 ⊂ INTEGER ARRAY DPYBUF[1:DPYSIZ];INTEGER DPPOINT,DPP1,DPP2,DATSHIFT;
00240
00250 EXTERNAL PROCEDURE PREPARE;
00260 EXTERNAL FORTRAN PROCEDURE SIG(REFERENCE INTEGER P);
00270 EXTERNAL PROCEDURE TIMSET;
00280 EXTERNAL REAL PROCEDURE RUNTIM;
00290 EXTERNAL STRING PROCEDURE INCHWL;
00310
00320 DEFINE BPS="12";
00330 DEFINE DATSIZ="1280",BUFEXS="43",BUFSIZ="1323",
00335 TABSIZ="7400",LISSIZ="1000",INSIZ="24";
00340 DEFINE BYTE="((ILDB(BPT) LSH 24)%2↑24)";
00350 DEFINE LBYT="ILDB(LBPT)";
00360 DEFINE LBYTE="((ILDB(LBPT) LSH 24)%2↑24)";
00362 DEFINE TBLSIZ="250";
00364
00370 STRING FILI,TFILEI,TFILE,FILEI,OPT0,OPT1,OPT2,OPT3;
00380 INTERNAL INTEGER ARRAY DATBUF[0:BUFSIZ];
00390 INTERNAL INTEGER ARRAY TABLES[0:TABSIZ];
00400 INTERNAL INTEGER ARRAY PHLIST,HLIST[00:63];
00410 INTERNAL INTEGER ARRAY LIST[0:LISSIZ];
00420 INTERNAL INTEGER ARRAY FLIST[0:35];
00430 INTEGER ARRAY LFILE[0:'177];
00440 INTERNAL REAL ARRAY A,B,C[0:256];
00450 REAL X,SX;
00460 REAL ARRAY WINDOW[0:256];
00470 INTEGER ARRAY D[0:992];
00480 INTERNAL INTEGER ARRAY INNAM[0:INSIZ];
00490 INTERNAL INTEGER ARRAY INCNT,INSUB,INDIV,INRAW,INDAT[0:INSIZ];
00500 INTEGER CHAN1,CHAN2,CHAN3,CHAN4,CHAN5,CHAN6,EOF,IEOF;
00510 INTEGER BPT,BPTFST,BPTSAV,LBPT,SEGCNT,SEGTOT;
00520 INTEGER H,I,J,K,L;
00530 INTERNAL INTEGER M,N,P,RATE,STEPS,INFLAG,FLAG;
00540 INTERNAL INTEGER SEGC,SEGMRK,SEGSAV;
00550 INTERNAL INTEGER INTOT,PONY,HINT,UPCNT,TEACH;
00560 INTERNAL INTEGER I1L,I1H,I2L,I2H,I3L,I3H, INL,INH,NZRNG,
00565 FP1L,FP1H,FP2L,FP2H,
00570 ILPB,ILPC, IHPB,IHPC ;
00580 INTERNAL INTEGER NF; ⊂ *** USED IN PREPARE;
00582 INTERNAL INTEGER ARRAY TABLET[0:TBLSIZ],TBLIS[0:TBLSIZ%5];
00584 INTERNAL INTEGER TFLAG;
00585 INTERNAL INTEGER ZEROF,ZEROC;
00586
00590 LABEL START;
00600 LABEL LABELA,LABELB,ZZZZ;
00610 STRING READ1,READ2,PREHINT,STEPX,STPMOD;
00620 INTEGER HCOUNT,HINDEX;
00622 STRING RECMOD; INTEGER ARRAY LEV1,LEV2,LEV3,SEG1,SEG2,SEG3[0:20];
00624 INTEGER CON1,CON2,CON3;
00626
00630 ⊂ ****SET UP****;
00010 PROCEDURE ARRDIS(INTEGER ARRAY A; INTEGER N,XPOS,YPOS;STRING ID);
00020 BEGIN
00030 COMMENT DISPLAYS A HISTOGRAM OF THE FIRST N VALUES
00035 OF ARRAY A AT XPOS,YPOS;
00040 INTEGER I,J,SP;
00050 INTEGER LY,DY;
00060 INTEGER MAX;
00070 MAX←0;
00080 FOR I←0 STEP 1 UNTIL N DO
00090 IF ABS(A[I])>MAX THEN MAX←ABS(A[I]);
00100 MAX←MAX/256;
00110 SP←1024%N; COMMENT HORIZONTAL SPACING;
00120 AIVECT(XPOS,YPOS); RVECT(1023,0); RIVECT(-1023,0); RVECT(0,256);
00130 LY←A[0]/MAX+YPOS;
00140 AIVECT(XPOS,LY);
00150 FOR I←1 STEP 1 UNTIL N-1 DO
00160 BEGIN
00170 DY←A[I]/MAX+YPOS-LY;
00180 LY←LY+DY;
00190 RVECT(SP,DY);
00200 END;
00210 AIVECT(XPOS,YPOS);
00220 FOR I←1 STEP 1 UNTIL 10 DO
00230 BEGIN
00240 RVECT(0,-15); COMMENT INSERT HORIZONTAL SCALE;
00250 RIVECT(26,15);
00260 RVECT(0,-5);
00270 RIVECT(26,5);
00280 RVECT(0,-10);
00290 RIVECT(26,10);
00300 RVECT(0,-5);
00310 RIVECT(26,5);
00320 END;
00330 RVECT(0,-15);
00340 AIVECT(XPOS,YPOS-40);
00350 DPYSST("0 1 2 3 4 5 6 7 8 9 10");
00360 AIVECT(XPOS,YPOS-60);
00370 DPYSST(ID);
00380 END "ARRDIS";
00390
00400 PROCEDURE DATDIS(INTEGER ARRAY A; INTEGER N,XPOS,YPOS;STRING ID);
00410 BEGIN
00420 COMMENT DISPLAYS A HISTOGRAM OF THE FIRST N VALUES
00425 OF ARRAY A AT XPOS,YPOS;
00430 INTEGER I,J,SP;
00440 INTEGER LY,DY;
00450 SP←1024%N; COMMENT HORIZONTAL SPACING;
00460 AIVECT(XPOS,YPOS); RVECT(1023,0);
00470 LY←A[0]/18+YPOS;
00480 AIVECT(XPOS,LY);
00490 FOR I←1 STEP 1 UNTIL N-1 DO
00500 BEGIN
00510 DY←A[I]/18+YPOS-LY;
00520 LY←LY+DY;
00530 RVECT(SP,DY);
00540 END;
00550 AIVECT(XPOS,YPOS-60); DPYSST(ID);
00560 END "DATDIS";
00570
00580 PROCEDURE RARDIS(REAL ARRAY C; INTEGER N,XPOS,YPOS;STRING ID);
00590 BEGIN
00600 COMMENT DISPLAYS A HISTOGRAM OF THE FIRST N VALUES
00605 OF ARRAY A AT XPOS,YPOS;
00610 INTEGER I,J,SP;
00620 INTEGER LY,DY;
00630 REAL MAX;
00640 MAX←0;
00650 FOR I←0 STEP 1 UNTIL N DO
00660 IF ABS(C[I])>MAX THEN MAX←ABS(C[I]);
00670 MAX←MAX/256;
00680 SP←1024%N; COMMENT HORIZONTAL SPACING;
00690 AIVECT(XPOS,YPOS); RVECT(1023,0); RIVECT(-1023,0); RVECT(0,256);
00700 LY←C[0]/MAX+YPOS;
00710 AIVECT(XPOS,LY);
00720 FOR I←1 STEP 1 UNTIL N-1 DO
00730 BEGIN
00740 DY←C[I]/MAX+YPOS-LY;
00750 LY←LY+DY;
00760 RVECT(SP,DY);
00770 END;
00780 AIVECT(XPOS,YPOS);
00790 FOR I←1 STEP 1 UNTIL 10 DO
00800 BEGIN
00810 RVECT(0,-15); COMMENT INSERT HORIZONTAL SCALE;
00820 RIVECT(26,15);
00830 RVECT(0,-5);
00840 RIVECT(26,5);
00850 RVECT(0,-10);
00860 RIVECT(26,10);
00870 RVECT(0,-5);
00872 RIVECT(26,5);
00874 END;
00900 RVECT(0,-15);
00910 AIVECT(XPOS,YPOS-40);
00920 DPYSST("0 1 2 3 4 5 6 7 8 9 10");
00930 AIVECT(XPOS,YPOS-60);
00940 DPYSST(ID);
00950 END "RARDIS";
00960
00970 INTERNAL PROCEDURE XRTRAN(REAL ARRAY A,B;INTEGER N,EVALUATE);
00980 BEGIN
00990 COMMENT IF EVALUATE IS FALSE THIS INTERNAL PROCEDURE UNSCRAMBLES
00995 THE SINGLE VARIATE COMPLEX TRANSFORM ;
01010 INTEGER K,NK,NH;
01020 REAL AA,AB,BA,BB,RE,IM,CK,SK,DC,DS,R;
01030 NH←N%2; R←3.1415926536/N;
01040 DS←SIN(R); R←-(2*SIN(0.5*R))↑2;
01050 DC←-0.5*R; CK←1.0; SK←0;
01060 IF EVALUATE THEN
01070 BEGIN
01080 CK←-1.0; DC←-DC;
01090 END
01100 ELSE
01110 BEGIN
01120 A[N]←A[0]; B[N]←B[0];
01130 END;
01140 FOR K←0 STEP 1 UNTIL NH DO
01150 BEGIN
01160 NK←N-K;
01170 AA←A[K]+A[NK]; AB←A[K]-A[NK];
01180 BA←B[K]+B[NK]; BB←B[K]-B[NK];
01190 RE←CK*BA+SK*AB; IM←SK*BA-CK*AB;
01200 B[NK]←IM-BB; B[K]←IM+BB;
01210 A[NK]←AA-RE; A[K]←AA+RE;
01220 DC←R*CK+DC; CK←CK+DC;
01230 DS←R*SK+DS; SK←SK+DS;
01240 END;
01250 END "XRTRAN";
00010 COMMENT MACROS;
00020 DEFINE ⊂="COMMENT",CR="'15",LF="'12",FF="'14",TB="'11";
00030 DEFINE CRLF="CR&LF", CRLF0="CR&'177&'21"; ⊂ FOR CRLF W/O FORM FEED;
00040 DEFINE TTY="'14",DSK="'13",BDSKO="'12",
00050 DPY="'11",BDSKI="'10",TMP="'0";
00060 DEFINE TIL="STEP 1 UNTIL";
00070 DEFINE BDSK="'10",GPH="'11",DSKO="GPH",HP="'7",
00080 HPLIST="'6",MUS="'4",ED="'3";
00090 INTEGER K.,J.; ⊂ USED IN MACROS;
00100 DEFINE ERROR(I)="OUT(TTY,""ERROR""&CVS(I))";
00110 DEFINE ISQRT(I)="(K.←(I)↑0.5)";
00120 DEFINE ODD(I)="((I) MOD 2)", EVEN(I)="¬ODD(I)";
00130 DEFINE ABS(I)="(IF I<0 THEN -I ELSE I)";
00140 DEFINE NONNEG(I)="(IF I<0 THEN 0 ELSE I)";
00150 DEFINE TRACE(N)="OUTSTR(""[""&CVS(N)&""]""(";
00160 DEFINE LTRACE(N)="OUTSTR(CR&LF&""[""&CVS(N)&""]"")";
00170 DEFINE FTRACE(N)=
00180 "BEGIN INTEGER F1,F2; GETFORMAT(F1,F2); SETFORMAT(0,7);
00190 OUTSTR(""[""&CVF(N)&""]""); SETFORMAT(F1,F2) END";
00200 DEFINE DATE="DATIME(""DATE"")", TIME="DATIME(""TIME"")";
00210 DEFINE MOVEADR(ADR,ARRAY)=
00220 "QUICK_CODE MOVE 11,ARRAY;MOVEM 11,ADR;END";
00230 DEFINE PI="3.141592653",PICON="(PI/180)";
00240 DEFINE INFINITY="'377777777777";
00250 STRING PARMS; ⊂ HOLDS CONTENTS OF PARMFILE;
00260
00270 INTERNAL PROCEDURE SETBR;
00280 BEGIN
00290 SETBREAK(1,CR,LF,"IN");
00300 SETBREAK(2,CR&",",LF&TB&" ","IN");
00310 SETBREAK(3,NULL,NULL,"IN");
00320 SETBREAK(4,CR&TB&" ",LF&",","IN");
00330 SETBREAK(5,CR,LF,"ISP"); ⊂ SKIP CR&LF, KEEP LINE NBR AND TAB;
00340 SETBREAK(6,CR&TB&" ",LF&".,","IN");
00350 SETBREAK(7,NULL,0,"I"); ⊂ TO REMOVE NULL CHARACTERS FROM STRING;
00360 SETBREAK(8, "=←;[("&CR , LF&" ])" , "IN");
00370 SETBREAK(9,NULL,0&" "&CR&LF&TB,"IN");
00380 ⊂ READS ENTIRE FILE, OMITTING LINE
00390 NUMBERS, NULLS, BLANKS, CR`S, LF`S, TB`S;
00400 SETBREAK(10," "&TB&CR,"0123456789"&LF,"IN");
00410 SETBREAK(11,NULL,0,"IN");
00420 ⊂ READS ENTIRE FILE, OMITTING LINE NUMBERS,
00430 AND NULLS;
00440 END "SETBR";
00450
00460
00470 INTERNAL PROCEDURE LOOKIN(INTEGER CHAN; REFERENCE STRING FILENAME);
00480 BEGIN ⊂ REQUIRES SETBREAK(1,CR,LF,"IN");
00490 BOOLEAN NF;
00500 LOOKUP(CHAN,FILENAME,NF);
00510 WHILE NF DO
00520 BEGIN
00530 OUTSTR(CR&LF&"Can't find "&FILENAME&". File=");
00540 FILENAME ← INPUT(TTY,1);
00550 LOOKUP(CHAN,FILENAME,NF)
00560 END;
00570 END "LOOKIN";
00580
00590
00600 PROCEDURE TELL;
00610 BEGIN
00620 INTEGER TELPPT,TELQPT;
00630 ⊂ To report on the performance of the signature tables;
00640 INTEGER I,J,K,L,HPOINT,MX,IX;
00650
00660 OUTSTR(CRLF&"HINT: "&CVXSTR(PHLIST[H])&TB);
00670
00680 HPOINT←POINT(1,HLIST[H],-1);
00690 FOR I←0 STEP 1 UNTIL 35 DO
00700 IF (K←ILDB(HPOINT))=1 THEN OUTSTR(CVXSTR(FLIST[I])&" ");
00710 OUTSTR(CRLF&"INPUT:"); SETFORMAT(3,0);
00720 FOR I←0 STEP 1 UNTIL 18 DO OUTSTR(CVS(INDAT[I]));
00730 OUTSTR(" "&CVS(ZEROC));
00740 OUTSTR(CRLF&LF&"Table"&TB&"Type"&TB&"Learn"&TB&"Output"&CRLF);
00750 SETFORMAT(1,0);
00760 L←INTOT;
00770 FOR I←INTOT*74 STEP 74 UNTIL TABSIZ DO BEGIN
00780 IF TABLES[I+1]=0 THEN DONE ELSE BEGIN "DECODE"
00790 STRING LEARN; INTEGER K1,K2,K3,K4;
00800 IF LIST[L+LISSIZ%10]≥CVSIX("Q0") THEN BEGIN
00810 K←LIST[L+LISSIZ%5]; K1←K LSH -18; K2←(K LSH 18) LSH -30;
00820 K3←(K LSH 24) LSH -30; K4←(K LSH 30) LSH -30;
00830 LEARN←CVXSTR(PHLIST[K1])[1 TO 2]&CVXSTR(PHLIST[K2])[1 TO 2]&
00840 CVXSTR(PHLIST[K3])[1 TO 2]&CVXSTR(PHLIST[K4])[1 TO 2];
00850 END
00860 ELSE LEARN←CVXSTR(LIST[L+LISSIZ%5]);
00870 OUTSTR(CVXSTR(LIST[L])&TB&CVXSTR(LIST[L+LISSIZ%10])&LEARN&TB);
00880 END "DECODE";
00890 OUTSTR(CVS(LDB(POINT(3,TABLES[I],2))));
00900 IF LDB(POINT(1,TABLES[I+1],5))≠0 THEN BEGIN
00910 OUTSTR(TB&CVS(LDB(POINT(3,TABLES[I],5)))&TB&
00920 CVS(LDB(POINT(3,TABLES[I],8)))
00930 &TB&CVS(LDB(POINT(3,TABLES[I],11))));
00940 OUTSTR(TB&CVS(LDB(POINT(3,TABLES[I],14)))); L←L+1;I←I+74 END;
00950 OUTSTR(CRLF);
00960 L←L+1;
00970 END;
00980 IF TFLAG≠0 THEN BEGIN L←0;
00990 OUTSTR(CRLF&"Name"&TB&"Input"&TB&"Level"&TB&"Hyst"&
01000 TB&"Prob"&TB&"St.Seg"&TB&"SegCnt"&CRLF);
01010 FOR I←0 STEP 5 UNTIL TBLSIZ DO BEGIN
01020 IF TABLET[I+1]=0 THEN DONE ELSE
01030 IF (LDB(POINT(5,TABLET[I+2],12)))>0 THEN BEGIN "COUNT"
01040 OUTSTR(CVXSTR(TABLET[I+1])&TB&CVXSTR(TBLIS[L])&TB&
01050 CVS(LDB(POINT(3,TABLET[I+2],3)))&TB&
01060 CVS(LDB(POINT(2,TABLET[I+2],5)))&TB&
01070 CVS(LDB(POINT(3,TABLET[I],2)))&TB&
01080 CVS(LDB(POINT(8,TABLET[I],10)))&TB&
01090 CVS(LDB(POINT(7,TABLET[I],17)))&CRLF);
01100 END "COUNT"; L←L+1; END; END;
01110
01120
01130 OPEN(CHAN6,"DSK",0,2,'10,0,0,EOF);
01140 LOOKUP(CHAN6,"TELL.DOC",0);
01150 DEFINE UGETF="'073000000000";
01160 START_CODE;
01170 UGETF 6,I;
01180 END;
01190 ENTER(CHAN6,"TELL.DOC",0);
01200 USETO(CHAN6,I);
01210
01220 SETFORMAT(2,0); OUT(CHAN6,CVS(SEGC)&" "); SETFORMAT(4,0);
01230 FOR I←0 STEP 2 UNTIL 18 DO OUT(CHAN6,CVS(INDAT[I]));
01240 SETFORMAT(2,0); OUT(CHAN6," ");
01250 FOR I←INTOT STEP 1 UNTIL LISSIZ-1 DO BEGIN
01260 IF LIST[I]=0 THEN DONE;
01270 J←I*74;
01280 TELPPT←POINT(3,TABLES[J],2);
01290 ⊂ TELQPT←POINT(3,TABLES[J],17);
01300 IF LIST[I+LISSIZ%10]≥CVSIX("Q0") THEN BEGIN
01310 MX←0; IX←0;
01320 FOR K←1 STEP 1 UNTIL 4 DO BEGIN
01330 L←LDB(POINT(3,TABLES[J],K*3+2));
01340 IF L>MX THEN BEGIN MX←L; IX←K END; END;
01350 IF MX=0 THEN IX←0;
01360
01370 OUT(CHAN6,CVS(MX)); ⊂ IX←MX TEMPORARY ;
01380 I←I+1;
01390 END ELSE
01400 OUT(CHAN6,CVS(LDB(TELPPT)));
01410 END;
01420 OUT(CHAN6,CRLF&" "&CVXSTR(PHLIST[H])[1 TO 3]); SETFORMAT(4,0);
01430 FOR I←1 STEP 2 UNTIL 18 DO OUT(CHAN6,CVS(INDAT[I]));
01440 OUT(CHAN6,CRLF);
01450 IF TFLAG≠0 THEN BEGIN L←0; TFLAG←0;
01460 OUT(CHAN6,CRLF&"Name"&TB&"Input"&TB&"Level"&TB&"Hyst"&TB&
01465 "Prob"&TB&"St.Seg"&TB&"SegCnt"&CRLF);
01472 FOR I←0 STEP 5 UNTIL TBLSIZ DO BEGIN
01480 IF TABLET[I+1]=0 THEN DONE ELSE
01485 IF (LDB(POINT(5,TABLET[I+2],12)))>0 THEN BEGIN "COUNT"
01490 OUT(CHAN6,CVXSTR(TABLET[I+1])&TB&CVXSTR(TBLIS[L])&TB&
01500 CVS(LDB(POINT(3,TABLET[I+2],3)))&TB&
01510 CVS(LDB(POINT(2,TABLET[I+2],5)))&TB&
01520 CVS(LDB(POINT(3,TABLET[I],2)))&TB&
01530 CVS(LDB(POINT(8,TABLET[I],10)))&TB&
01540 CVS(LDB(POINT(7,TABLET[I],17)))&TB&
01550 CRLF);
01560 J←LDB(POINT(8,TABLET[I+2],7)); K←LDB(POINT(23,TABLET[I+2],35));
01570 TABLET[I+2]←0; TABLET[I+2]←J LSH 28 + K ;
01575 END "COUNT"; L←L+1; END; END;
01580 CLOSE(CHAN6);
01590 END "TELL";
01600
01610 STRING PROCEDURE HEADER;
01620 BEGIN STRING H1,H2; INTEGER I,J,K;
01630 IF HCOUNT>0 THEN BEGIN HCOUNT←HCOUNT-1; RETURN(PREHINT) END
01640 ELSE WHILE HCOUNT=0 DO BEGIN "XX"
01650 I←LFILE[HINDEX]; K←LDB(POINT(7,I,30)); J←SEGC-K;
01660
01670 IF I=0 THEN BEGIN PREHINT←""; HCOUNT←99; RETURN(PREHINT) END;
01680 IF J ≥ 0 THEN BEGIN "LATCH"
01690 H1←CVXSTR(LDB(POINT(12,I,11)) LSH 24);
01700 H2←CVXSTR(LDB(POINT(12,I,23)) LSH 24);
01710 IF EQU(H1,H2) THEN BEGIN PREHINT←H1;HCOUNT←LDB(POINT(5,I,35));
01720 HCOUNT←HCOUNT-J;
01730 HINDEX←HINDEX+1; RETURN(PREHINT); DONE
01740 END
01750 ELSE BEGIN PREHINT←""; HCOUNT←LDB(POINT(5,I,35));
01760 HCOUNT←HCOUNT-J; HINDEX←HINDEX+1; RETURN(PREHINT); DONE;
01770 END;
01780 END "LATCH";
01790 PREHINT←""; RETURN(PREHINT); END "XX";
01800 END "HEADER";
01810
01820 PROCEDURE REPORT;
01830 BEGIN "REP"
01840 STRING LAB; INTEGER OUT,I,J,K,L;
01850 IF TFLAG≠0 THEN BEGIN
01860 TFLAG←0;
01870 FOR I←0 STEP 5 UNTIL TBLSIZ DO BEGIN
01880 IF TABLET[I+1]=0 THEN DONE ELSE
01885 IF (LDB(POINT(5,TABLET[I+2],12)))>0 THEN BEGIN "CT"
01890 LAB←CVXSTR(TABLET[I+1]);
01895 OUT←LDB(POINT(18,TABLET[I],17)) LSH 18 ;
01900 IF EQU(LAB,"VOI-C ")∨EQU(LAB,"FRI-C ") THEN
01910 BEGIN LEV1[CON1]←TABLET[I+1];
01920 SEG1[CON1]←OUT; CON1←CON1+1; END
01930 ELSE IF EQU(LAB,"VOWEL ")∨EQU(LAB,"GLIDE ")∨EQU(LAB,"NASAL ")
01940 ∨EQU(LAB,"BURST ")∨EQU(LAB,"STOP ") THEN
01950 BEGIN LEV2[CON2]←TABLET[I+1];
01960 SEG2[CON2]←OUT; CON2←CON2+1; END
01970 ELSE BEGIN LEV3[CON3]←TABLET[I+1];
01980 SEG3[CON3]←OUT; CON3←CON3+1; END;
01990
02000 J←LDB(POINT(8,TABLET[I+2],7)); K←LDB(POINT(23,TABLET[I+2],35));
02010 TABLET[I+2]←0; TABLET[I+2]←J LSH 28 + K ; END "CT"; END; END;
02020 END "REP";
02030
00010 SETBR;
00020 UPCNT←3;
00030 FILEI←"TOO1.DAT[1,THO]";OPT1←"N";OPT2←"N";OPT3←"0"; M←8;INFLAG←0;
00040 CHAN1←1; CHAN2←2; CHAN3←3; CHAN4←4; CHAN5←5; CHAN6←6;
00050 CLOSE(CHAN1);
00060 OPEN(CHAN1,"DSK",'10,10,0,0,0,EOF);
00070 LOOKUP(CHAN1,"TABLES.DAT",0);
00080 ARRYIN(CHAN1,INSUB[0],INSIZ);
00090 ARRYIN(CHAN1,INDIV[0],INSIZ);
00100 ARRYIN(CHAN1,INCNT[0],INSIZ);
00110 ARRYIN(CHAN1,INNAM[0],INSIZ);
00120 ARRYIN(CHAN1,FLIST[0],36);
00130 ARRYIN(CHAN1,PHLIST[0],64);
00140 ARRYIN(CHAN1,HLIST[0],64);
00150 ARRYIN(CHAN1,TABLES[0],TABSIZ);
00155 ARRYIN(CHAN1,TABLET[0],TBLSIZ);
00160
00170 CLOSE(CHAN5); CLOSE(CHAN6);
00180 OPEN(CHAN5,"DSK",'10,10,0,0,0,EOF);
00190 LOOKUP(CHAN5,"SIGLST.DAT",0);
00200 ARRYIN(CHAN5,LIST[0],LISSIZ);
00210 INTOT←WORDIN(CHAN5);
00212 ARRYIN(CHAN5,TBLIS[0],TBLSIZ%5);
00220 RELEASE(CHAN5);
00300 OPEN(CHAN6,"DSK",0,2,'10,0,0,EOF);
00310 ENTER(CHAN6,"TELL.DOC",0);
00320 OUT(CHAN6,TB&"Session iniated "&DATIME&CRLF); CLOSE(CHAN6);
00330 START:
00560 IF (TFILEI←STRIN("DATA FILE("&FILEI&") = "))≠"" THEN FILEI←TFILEI;
00575 M←8;
00590 N←2↑M; NF←2*N;
00600 FOR I←0 STEP 1 UNTIL N DO
00610 WINDOW[I]←(1-COS((2*PI*I)/N))/2;
00620
00622 FOR I←0 STEP 5 UNTIL TBLSIZ-5 DO BEGIN IF TABLET[I+1]=0 THEN DONE;
00623 J←LDB(POINT(8,TABLET[I+2],7)); K←LDB(POINT(23,TABLET[I+2],35));
00624 TABLET[I+2]←0; TABLET[I+2]←J LSH 28 + K ; END ;
00625 OUTSTR(CRLF&"Do you want TELL ? YorCR = "); OPT1←INCHWL;
00627 FOR I←0 STEP 1 UNTIL 10 DO BEGIN LEV1[I]←LEV2[I]←LEV3[I]←0;
00629 SEG1[I]←SEG2[I]←SEG3[I]←0; END;
00630 N←2↑M;
00640 OPEN(CHAN6,"DSK",0,2,'10,0,0,EOF);
00650 LOOKUP(CHAN6,"TELL.DOC",0);
00660 DEFINE UGETF="'073000000000";
00670 START_CODE;
00680 UGETF 6,I;
00690 END;
00700 ENTER(CHAN6,"TELL.DOC",0);
00710 USETO(CHAN6,I);
00720 OUT(CHAN6,CRLF&DATIME&" Data file "&FILEI&" WITH "&
00721 CVS(SEGTOT)&" SEGMENTS."&CRLF&LF&"SEG. ");
00722 IF OPT1="Y" THEN BEGIN
00724
00730 FOR I←0 STEP 2 UNTIL 18 DO OUT(CHAN6,CVXSTR(INNAM[I])[1 TO 4]);
00740 FOR I←INTOT STEP 2 UNTIL LISSIZ-1 DO BEGIN
00750 IF LIST[I]=0 THEN DONE;
00760 OUT(CHAN6,CVXSTR(LIST[I])[1 TO 3]&" ");
00770 IF LIST[I+LISSIZ%10]≥CVSIX("Q0") THEN I←I+1;
00780 IF LIST[I+1+LISSIZ%10]≥CVSIX("Q0") THEN I←I+1;
00790 END;
00800 OUT(CHAN6,CRLF&" HINT ");
00810 FOR I←1 STEP 2 UNTIL 17 DO OUT(CHAN6,CVXSTR(INNAM[I])[1 TO 4]);
00820 OUT(CHAN6," ");
00830 FOR I←INTOT+1 STEP 2 UNTIL LISSIZ-1 DO BEGIN
00840 IF LIST[I]=0 THEN DONE;
00850 OUT(CHAN6,CVXSTR(LIST[I])[1 TO 3]&" ");
00860 IF LIST[I+LISSIZ%10]≥CVSIX("Q0") THEN I←I+1;
00870 IF LIST[I+1+LISSIZ%10]≥CVSIX("Q0") THEN I←I+1;
00880 END; END;
00890 OUT(CHAN6,CRLF&LF);
00900 CLOSE(CHAN6);
00902 ⊂ OUTSTR(CRLF&
00903 "Do you want to run this file in RECOG mode?(hints=NU)YorCR = ");
00904 ⊂ IF (RECMOD←INCHWL)="Y" THEN GO TO LABELA ;
00906
01000 OUTSTR(CRLF&"Shift DATABUF by WORDS = ");
01010 DATSHIFT←CVD(INCHWL); ⊂ USE TO TEST PHASE SENSITIVITY OF LEARNING;
01020
01030 LABELA: CLOSE(CHAN4);
01040 OPEN(CHAN4,"DSK",'10,10,0,0,0,EOF);
01050 LOOKIN(CHAN4,FILEI);
01055 FOR I←0 STEP 5 UNTIL TBLSIZ DO IF TABLET[I+1]≠0 THEN TABLET[I]←'777777777777 ELSE DONE;
01060 EOF←0; SEGC←0; SEGCNT←0;
01070 ARRYIN(CHAN4,LFILE[0],'200); ⊂ Input header;
01080 SEGTOT←(LFILE[0]*6)%N; RATE←LFILE[2];
01085 OUTSTR(CRLF&"SAM RATE ="&CVS(LFILE[2]));
01090 IF RATE=0 THEN RATE←CVD(STRIN("Sampling rate missing. Rate = "));
01100 ⊂ **** SET PARAMETER RANGES
01110 THE PARA LIMITS ARE (DOUBLE CHECK)
01115 F1=200/800 F2=700/2050 F3=2000/3200
01120 NP=800/1500 NZRNG=NP+/-500 ?
01130 FP1=1800/3200 FP2=3200/5000 LPE=300/450 HPE=2500/3000 ;
01140 ⊂ *** I2H CHANGED FROM 28 TO 26 ESCAPE HI AMP F3 ;
01150 SX←RATE/N; I1L←200./SX ; I1H←800./SX+.5 ;
01155 I2L←700./SX; I2H←2050./SX+.5;
01160 I3L←1950./SX; I3H←3250./SX+.5;
01170 INL←800./SX; INH←1500./SX+.5; NZRNG←500./SX+.5;
01180 FP1L←1800./SX;FP1H←3200./SX;FP2L←3200./SX+.5;FP2H←5000./SX+.5;
01190 ILPB←300./SX; ILPC←450./SX; IHPC←2500./SX; IHPB←3000./SX;
01200 BPTFST←POINT(BPS,DATBUF[0],-1);
01201 IF DATSHIFT>0 THEN
01210 ARRYIN(CHAN4,DATBUF[0],DATSHIFT);
01215 ⊂ IF RECMOD≠"Y" THEN BEGIN "PL"
02460 ⊂ END;⊂ END "PL" ELSE ; BEGIN "RECOG" INTEGER I,J,K,L,SEGLIM;
02470 CON1←CON2←CON3←0; SEGC←K←1;HINT←H←0;TABLES[2]←HLIST[0];
02474
02480 ARRYIN(CHAN4,DATBUF[0],43);
02490 WHILE EOF=0 DO BEGIN "L1"
02500 ARRYIN(CHAN4,DATBUF[43],DATSIZ);
02510
02520 IF EOF≠0 THEN
02530 BEGIN
02540 J←EOF LAND '777777;
02550 FOR I←J STEP 1 UNTIL N-1 DO DATBUF[I]←0;
02560 END;
02570 BPT←BPTFST;
02580
02590 K←1; WHILE K≤6*DATSIZ%N DO BEGIN "L2"
02592 INTEGER ISK,IS;
02594 ISK←((K-1)*128)%3-1; IF ISK<0 THEN ISK←0;
02596 BPT←POINT(BPS,DATBUF[ISK],-1); IS←(K-1)*128-(ISK+1)*3;
02598 FOR I←1 STEP 1 UNTIL IS DO L←ILDB(BPT); ⊂ POSITION PBT;
02600
02610 J←I←ZEROC←0; A[J]←BYTE*WINDOW[I]; B[J]←BYTE*WINDOW[I+1]; J←J+1;
02620 IF B[J]<A[J] THEN ZEROF←0 ELSE ZEROF←1;
02630 FOR I←2 STEP 2 UNTIL N-1 DO
02640 BEGIN
02650 A[J]←BYTE*WINDOW[I];
02660 IF A[J]<B[J-1] THEN ZEROF←0 ELSE
02665 IF ZEROF=0 THEN BEGIN ZEROF←1; ZEROC←ZEROC+1; END;
02670 B[J]←BYTE*WINDOW[I+1];
02680 IF B[J]<A[J] THEN ZEROF←0 ELSE
02685 IF ZEROF=0 THEN BEGIN ZEROF←1; ZEROC←ZEROC+1; END;
02690 J←J+1;
02700 END;
02710 FRXFM(M-1,A[0],B[0]);
02720 XRTRAN(A,B,N/2,FALSE);
02730 FOR I←0 STEP 1 UNTIL N/2 DO C[I]←5.*ALOG10(A[I]↑2+B[I]↑2);
02740 PREPARE;
02750 SIG(P); IF OPT1="Y" THEN TELL;
02760 REPORT; SETFORMAT(3,0);
02770
02780 SEGC←SEGC+1; IF SEGC>SEGTOT THEN DONE;
02790 K←K+1; END "L2";
02792 FOR I←0 STEP 1 UNTIL 42 DO DATBUF[I]←DATBUF[DATSIZ+1+I];
02794
02800
02810 IF SEGC>SEGTOT THEN BEGIN
02820 FOR I←0 STEP 1 UNTIL INSIZ DO INDAT[I]←0;
02830 FOR I←0 STEP 1 UNTIL 4 DO BEGIN SIG(P);
02835 REPORT END; DONE END;
02840 END "L1"; IF OPT1="Y" THEN TELL;
02850
02855 BEGIN "DISP"
02858 INTEGER ARRAY DPBUF[0:2000]; INTEGER LV,ST,CN,K1,K2,J1,J2;
02861 INTEGER LOWLIM,ST1;
02862
02864 DPYSET(DPBUF); TYPLOC(-250,-510); SEGLIM←90; LOWLIM←0;
02870 CLOSE(CHAN4); OPEN(CHAN4,"DSK",'10,10,0,0,0,EOF);
02875 LOOKIN(CHAN4,FILEI);
02880 ARRYIN(CHAN4,DATBUF[0],128);
02882 IF DATSHIFT>0 THEN ARRYIN(CHAN4,DATBUF[0],DATSHIFT);
02885 WHILE SEGLIM≠0 DO BEGIN "L3" L←0; WHILE EOF=0 DO BEGIN
02889 ARRYIN(CHAN4,DATBUF[0],DATSIZ);
02893 IF EOF≠0 THEN
02897 BEGIN
02901 J←EOF LAND '777777;
02905 FOR I←J STEP 1 UNTIL DATSIZ-1 DO DATBUF[I]←0;
02909 END;
02913 LBPT←POINT(BPS,DATBUF[0],-1);
02917 FOR I←0 STEP 1 UNTIL 959 DO
02921 BEGIN D[I]←LBYTE;J←ILDB(LBPT);J←ILDB(LBPT);J←ILDB(LBPT);END;
02925 J←400-L*220; DATDIS(D,960,-511,J," ");
02927 L←L+1; IF L*30≥SEGLIM-LOWLIM THEN DONE;
02929 END ;
02933
02937 FOR I←0 STEP 1 UNTIL CON1-1 DO BEGIN
02941 LV←LDB(POINT(3,SEG1[I],2)); ST1←LDB(POINT(8,SEG1[I],10));
02943 ST←ST1-LOWLIM;
02945 CN←LDB(POINT(7,SEG1[I],17));
02949 IF (ST≤90)∧(ST>0) THEN BEGIN
02953 J1←ST/30.3333;
02957 J←400-220*J1;
02961 K1←ST-J1*30; K←-511+32*(K1-1); SETFORMAT(1,0);
02965 AIVECT(K,J); AVECT(K,J-110);
02967 RIVECT(5,0); DPYSST(CVS(ST1)); END;
02969
02973 ST←ST+CN+2; ST1←ST1+CN+2;
02977 IF (ST≤90)∧(ST>0) THEN BEGIN
02981 J1←ST/30.3333; K1←ST-J1*30; K←-511+32*(K1-1);
02985 J←400-220*J1;
02989 AIVECT(K,J); AVECT(K,J-110);
02991 RIVECT(5,0); DPYSST(CVS(ST1));
02993 RIVECT(-10,-20); DPYSST("*"); END;
02997
03001
03005 END;
03009
03013
03017 FOR I←0 STEP 1 UNTIL CON2-1 DO BEGIN
03021 LV←LDB(POINT(3,SEG2[I],2));
03023 ST1←LDB(POINT(8,SEG2[I],10));ST←ST1-LOWLIM;
03025 CN←LDB(POINT(7,SEG2[I],17));
03029 IF (ST≤90)∧(ST>0) THEN BEGIN
03033 J1←ST/30.3333; J←400-220*J1;
03037 K1←ST-J1*30; K←-511+32*(K1-1); SETFORMAT(1,0);
03041 AIVECT(K,J); AVECT(K,J-110)
03043 ; RIVECT(5,0); DPYSST(CVS(ST1)); END;
03045
03049 ST←ST+CN+2; ST1←ST1+CN+2;
03053 IF (ST≤90)∧(ST>0) THEN BEGIN
03057 J1←ST/30.3333; K1←ST-J1*30; K←-511+32*(K1-1);
03061 J←400-220*J1;
03065 AIVECT(K,J); AVECT(K,J-110); RIVECT(5,0); DPYSST(CVS(ST1));
03069 RIVECT(-10,-20); DPYSST("*"); END;
03073
03077 END;
03081 FOR I←0 STEP 1 UNTIL CON3-1 DO BEGIN
03085 LV←LDB(POINT(3,SEG3[I],2))
03087 ; ST1←LDB(POINT(8,SEG3[I],10)); ST←ST1-LOWLIM;
03089 CN←LDB(POINT(7,SEG3[I],17));
03093 IF (ST≤90)∧(ST>0) THEN BEGIN
03097 J1←ST/30.3333; J←400-220*J1;
03101 K1←ST-J1*30; K←-511+32*(K1-1); SETFORMAT(1,0);
03105 AIVECT(K,J); AVECT(K,J-110);
03107 RIVECT(5,0); DPYSST(CVS(ST1)); END;
03109
03113 ST←ST+CN+2 ; ST1←ST1+CN+2;
03117 IF (ST≤90)∧(ST>0) THEN BEGIN
03121 J1←ST/30.3333; K1←ST-J1*30; K←-511+32*(K1-1);
03125 J←400-220*J1;
03129 AIVECT(K,J); AVECT(K,J-110);
03131 RIVECT(5,0); DPYSST(CVS(ST1));
03133 RIVECT(-10,-20); DPYSST("*"); END;
03137
03141 END; DPYOUT(1);
03145
03149 OUTSTR(CRLF&"LEVEL1"&" P"&" S"&" E*"&TB&TB&"LEVEL2"&" P"&
03151 " S"&" E*"&TB&TB&"LEVEL3"&" P"&" S"&" E*");
03153 FOR I←0 STEP 1 UNTIL 10 DO BEGIN SETFORMAT(3,0);
03157 IF LEV1[I]=0 ∧ LEV2[I]=0 ∧ LEV3[I]=0 THEN DONE;
03161 J←LDB(POINT(8,SEG1[I],10));
03165 OUTSTR(CRLF&CVXSTR(LEV1[I])&CVS(LDB(POINT(3,SEG1[I],2)))&
03169 CVS(J)& CVS(2+J+LDB(POINT(7,SEG1[I],17)))&"*");
03177
03181 J←LDB(POINT(8,SEG2[I],10));
03185 OUTSTR(TB&TB&CVXSTR(LEV2[I])&CVS(LDB(POINT(3,SEG2[I],2)))&
03189 CVS(J)&CVS(2+J+LDB(POINT(7,SEG2[I],17)))&"*");
03197 J←LDB(POINT(8,SEG3[I],10));
03201 OUTSTR(TB&TB&CVXSTR(LEV3[I])&CVS(LDB(POINT(3,SEG3[I],2)))&
03205 CVS(J)&CVS(2+J+LDB(POINT(7,SEG3[I],17)))&"*");
03213 END; IF SEGLIM≥SEGTOT THEN DONE ELSE
03217 BEGIN SEGLIM←SEGTOT;LOWLIM←90; DPYSET(DPBUF);
03219 TYPLOC(-250,-510); END; J←INCHWL; END "L3";
03221
04134
04140 OPEN(CHAN6,"DSK",0,2,'10,0,0,EOF);
04150 LOOKUP(CHAN6,"TELL.DOC",0);
04160 DEFINE UGETF="'073000000000";
04170 START_CODE;
04180 UGETF 6,I;
04190 END;
04200 ENTER(CHAN6,"TELL.DOC",0);
04210 USETO(CHAN6,I);
04220
04230
04240 OUT(CHAN6,CRLF&"Name"&TB&"Prob"&TB&"St.Seg"&TB&"SegCnt"&CRLF);
04250 FOR I←0 STEP 1 UNTIL CON1-1 DO
04260 OUT(CHAN6,CRLF&CVXSTR(LEV1[I])&TB&CVS(LDB(POINT(3,SEG1[I],2)))&
04265 TB& CVS(LDB(POINT(8,SEG1[I],10)))&TB&
04280 CVS(LDB(POINT(7,SEG1[I],17))));
04290 OUT(CHAN6,CRLF&"LEV2"&CRLF); FOR I←0 STEP 1 UNTIL CON2-1 DO
04300 OUT(CHAN6,CRLF&CVXSTR(LEV2[I])&TB&CVS(LDB(POINT(3,SEG2[I],2)))&
04305 TB&VS(LDB(POINT(8,SEG2[I],10)))&TB&
04320 CVS(LDB(POINT(7,SEG2[I],17))));
04330 OUT(CHAN6,CRLF&"LEV3"&CRLF);
04335 FOR I←0 STEP 1 UNTIL CON3-1 DO
04340 OUT(CHAN6,CRLF&CVXSTR(LEV3[I])&TB&CVS(LDB(POINT(3,SEG3[I],2)))&
04345 TB&CVS(LDB(POINT(8,SEG3[I],10)))&TB&
04360 CVS(LDB(POINT(7,SEG3[I],17))));
04370 OUT(CHAN6,CRLF&CRLF); CLOSE(CHAN6);
04380
04390 END "DISP"; END "RECOG";
04400
04410
04420 FOR I←0 STEP 1 UNTIL INSIZ DO INDAT[I]←0;
04425 HINT←H←0; TABLES[2]←HLIST[0]; ⊂ XXXX ;
04430 FOR I←0 STEP 1 UNTIL 3 DO BEGIN SIG(P);
04435 IF OPT1="Y" THEN TELL; END;
04440 J←INCHWL; ⊂ TO WAIT BEFORE OR NEW FILE;
04540
04580 GO TO START;
00010 END "RECOG";